package com.test;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * mybatis plus 自动生成类
 */
public class AutoMybatisPlus {
    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sdf.format(new Date()) + "开始自动生成.......");
        createGenerator();
        System.out.println(sdf.format(new Date()) + "完成自动生成.......");
    }

    public static void createGenerator(){
        //创建一个代码生成器
        AutoGenerator ag = new AutoGenerator();
        ag.setGlobalConfig(globalConfig());
        ag.setDataSource(dataSourceConfig());
        ag.setPackageInfo(packageConfig());
        ag.setTemplate(templateConfig());
        ag.setStrategy(strategyConfig());
        //执行生成
        ag.execute();
    }

    /**
     * 配置全局变量信息
     * @return
     */
    public static GlobalConfig globalConfig(){
        //全局配置变量
        GlobalConfig gc = new GlobalConfig();
        //代码生成目录存放的位置(绝对路径)
        String rootPath = "D:\\Workspaces\\Idea\\TheCodeOfJava202012\\springboot20210309";
        //次级路径
        String secondPath = "/src/main/java";
        gc.setOutputDir(rootPath + secondPath);
        //添加开发者信息
        gc.setAuthor("HQJ");
        //生成新的是否覆盖旧的
        gc.setFileOverride(false);
        //主键生成策略
        gc.setIdType(IdType.AUTO);
        gc.setDateType(DateType.ONLY_DATE);

        //设置文件名称后缀名
        gc.setMapperName("%sDao"); //dao的名称 xxDao
        gc.setServiceName("%sService");
        gc.setServiceImplName("%sServiceI");
        gc.setControllerName("%sController");
        return gc;
    }

    /**
     * 配置数据源
     * @return
     */
    public static DataSourceConfig dataSourceConfig(){
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("bts.2015");
        dsc.setUrl("jdbc:mysql://127.0.0.1:3306/ssm2020?characterEncoding=utf8");
        return dsc;
    }

    /**
     * 配置包信息
     * @return
     */
    public static PackageConfig packageConfig(){
        PackageConfig pc = new PackageConfig();
        pc.setParent("com.springboot");

        pc.setEntity("domain");
        pc.setMapper("dao");
        pc.setService("service");
        pc.setServiceImpl("service");
        pc.setController("controller");
        return pc;
    }

    /**
     * 配置生成模板信息
     * @return
     */
    public static TemplateConfig templateConfig(){
        TemplateConfig tc = new TemplateConfig();

        tc.setService(null);//null表示不生成
        tc.setXml(null);

        return tc;
    }

    /**
     * 配置策略信息
     * @return
     */
    public static StrategyConfig strategyConfig(){
        StrategyConfig sc = new StrategyConfig();
        //指定查询表
        sc.setInclude("ssm_down");//表名 如果多个表，则用逗号,隔开
        //配置实体名称是否与表名一致
        sc.setNaming(NamingStrategy.underline_to_camel);
        //配置属性名与列名是否一致
        sc.setColumnNaming(NamingStrategy.underline_to_camel);
        //是否使用Lombok
        sc.setEntityLombokModel(true);
        //是否是RestController
        sc.setRestControllerStyle(false);
        //生成类名时忽略表名的前缀
        sc.setTablePrefix("ssm_");
        return sc;
    }
}
